import { Vec3 } from '@/core/types';
import { Entity } from '@/entities/Entity';

// 聊天消息接口
export interface ChatMessage {
  id: string;
  timestamp: number;
  sender: 'player' | 'entity';
  content: string;
  entityId?: string;
  entityType?: string;
}

// 对话上下文接口
export interface ConversationContext {
  entityId: string;
  entityType: string;
  history: ChatMessage[];
  gameContext: GameContext;
}

// 游戏上下文信息
export interface GameContext {
  playerPosition: Vec3;
  timeOfDay: 'morning' | 'noon' | 'evening' | 'night';
  weather: 'clear' | 'rain' | 'storm';
  nearbyBlocks: string[];
  nearbyEntities: string[];
}

// 生物个性配置
export interface EntityPersona {
  entityType: string;
  name: string;
  personality: string;
  background: string;
  speechStyle: string;
  interests: string[];
  relationships: Record<string, string>;
  greetings: string[];
  farewells: string[];
  
  // 扩展的个性化属性
  traits: PersonalityTraits;
  behaviorPatterns: BehaviorPatterns;
  emotionalStates: EmotionalStates;
  conversationStyle: ConversationStyle;
  autonomousChatTriggers: AutonomousChatTriggers;
  memoryCapacity: MemoryCapacity;
  socialPreferences: SocialPreferences;
}

// 个性特征
export interface PersonalityTraits {
  // 五大人格特征 (0-1 范围)
  openness: number;        // 开放性
  conscientiousness: number; // 尽责性
  extraversion: number;    // 外向性
  agreeableness: number;   // 宜人性
  neuroticism: number;     // 神经质
  
  // 特殊特征
  curiosity: number;       // 好奇心
  bravery: number;         // 勇敢程度
  loyalty: number;         // 忠诚度
  intelligence: number;    // 智力水平
  empathy: number;         // 共情能力
}

// 行为模式
export interface BehaviorPatterns {
  // 对话频率偏好
  chattiness: number;      // 健谈程度 (0-1)
  initiativeLevel: number; // 主动性 (0-1)
  
  // 反应模式
  responseSpeed: 'instant' | 'quick' | 'thoughtful' | 'slow';
  conversationLength: 'brief' | 'moderate' | 'lengthy' | 'variable';
  
  // 话题偏好
  favoriteTopics: string[];
  avoidedTopics: string[];
  
  // 时间偏好
  activeHours: ('morning' | 'noon' | 'evening' | 'night')[];
  restHours: ('morning' | 'noon' | 'evening' | 'night')[];
}

// 情感状态
export interface EmotionalStates {
  // 基础情绪倾向
  defaultMood: 'happy' | 'neutral' | 'sad' | 'angry' | 'excited' | 'calm' | 'anxious';
  
  // 情绪变化模式
  moodStability: number;   // 情绪稳定性 (0-1)
  emotionalRange: number;  // 情感表达范围 (0-1)
  
  // 特定情况下的情绪反应
  weatherSensitivity: number;  // 天气敏感度
  crowdComfort: number;        // 群体舒适度
  stressTolerance: number;     // 压力承受能力
}

// 对话风格
export interface ConversationStyle {
  // 语言特征
  vocabulary: 'simple' | 'moderate' | 'complex' | 'archaic';
  formality: 'casual' | 'friendly' | 'polite' | 'formal';
  humor: 'none' | 'dry' | 'playful' | 'sarcastic';
  
  // 表达方式
  directness: number;      // 直接程度 (0-1)
  verbosity: number;       // 冗长程度 (0-1)
  storytelling: number;    // 讲故事倾向 (0-1)
  
  // 特殊语言习惯
  catchphrases: string[];  // 口头禅
  speechPatterns: string[]; // 语言模式
  emoticons: string[];     // 表情符号偏好
}

// 自主对话触发器
export interface AutonomousChatTriggers {
  // 距离触发
  approachDistance: number;    // 触发距离
  farewellDistance: number;    // 告别距离
  
  // 时间触发
  greetingCooldown: number;    // 问候冷却时间(分钟)
  randomChatChance: number;    // 随机聊天概率 (0-1)
  
  // 环境触发
  weatherChangeReaction: boolean;  // 天气变化反应
  timeChangeReaction: boolean;     // 时间变化反应
  
  // 情境触发
  lonelinessTrigger: number;   // 孤独触发阈值(分钟)
  excitementTrigger: string[]; // 兴奋触发词
  fearTrigger: string[];       // 恐惧触发词
}

// 记忆能力
export interface MemoryCapacity {
  // 记忆范围
  conversationMemory: number;  // 对话记忆条数
  playerMemory: number;        // 玩家记忆天数
  eventMemory: number;         // 事件记忆条数
  
  // 记忆类型
  rememberNames: boolean;      // 记住名字
  rememberPreferences: boolean; // 记住偏好
  rememberPastEvents: boolean;  // 记住过往事件
  
  // 遗忘模式
  forgettingRate: number;      // 遗忘速率 (0-1)
  importantMemoryBonus: number; // 重要记忆加成
}

// 社交偏好
export interface SocialPreferences {
  // 群体偏好
  preferredGroupSize: number;  // 偏好群体大小
  leadershipTendency: number;  // 领导倾向 (0-1)
  followingTendency: number;   // 跟随倾向 (0-1)
  
  // 互动偏好
  physicalProximity: number;   // 物理距离偏好
  conversationInitiation: number; // 对话发起倾向
  conflictAvoidance: number;   // 冲突回避倾向
  
  // 关系建立
  trustBuilding: 'fast' | 'moderate' | 'slow' | 'very_slow';
  relationshipDepth: 'surface' | 'moderate' | 'deep' | 'intimate';
}

// AI服务配置
export interface AIConfig {
  apiUrl: string;
  apiKey: string;
  model: string;
  maxTokens: number;
  temperature: number;
  timeout: number;
}

// 聊天事件类型
export type ChatEventType = 
  | 'conversation_started'
  | 'conversation_ended'
  | 'message_sent'
  | 'message_received'
  | 'target_selected'
  | 'target_lost'
  | 'error_occurred'
  | 'ai_thinking_start'
  | 'ai_thinking_end'
  | 'config_updated'
  | 'no_targets_available';

// 聊天事件接口
export interface ChatEvent {
  type: ChatEventType;
  data?: any;
  timestamp: number;
}

// 聊天状态
export interface ChatState {
  isActive: boolean;
  currentTarget: Entity | null;
  currentConversation: ConversationContext | null;
  isWaitingForResponse: boolean;
  lastError: string | null;
}